<html>
<head>
  <title>HTTP(HyperText Transfer Protocol)请求</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="Evernote Windows/307027 (zh-CN, DDL); Windows/6.1.0 (Win32);"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="631"/>
<h1>HTTP(HyperText Transfer Protocol)请求</h1>

<div>
<span><div><span>    <span>    </span></span>HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP，使HTTP客户（如Web浏览器）能够从HTTP服务器(Web服务器)请求信息和服务。</div><div><span>    <span>    HTTP目前协议的版本是1.1.HTTP是一种无状态的协议，无状态是指Web浏览器和Web服务器之间不需要建立持久的连接，这意味着当一个客户端向服务器端发出请求，然后Web服务器返回响应(response)，连接就被关闭了，在服务器端不保留连接的有关信息.</span></span><br/></div><div><span>    <span>    HTTP使用内容类型，是指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型在MIME　Internet邮件协议上模型化，即Web服务器告诉Web浏览器该文件所具有的种类，是HTML文档、GIF格式图像、声音文件还是独立的应用程序。大多数Web浏览器都拥有一系列的可配置的辅助应用程序，它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。</span></span><br/></div><div><span><br/></span></div><div><span><br/></span></div><div><font style="color: rgb(173, 0, 0); font-size: 14pt;"><b>HTTP通信机制是在一次完整的HTTP通信过程中，Web浏览器与Web服务器之间将完成下列7个步骤：</b></font></div><div><ol><li><span style="font: normal normal normal 7pt/normal 'Times New Roman';">  </span>建立TCP连接</li><li><span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Web浏览器向Web服务器发送请求命令</li><li>Web浏览器发送请求头信息（浏览器发送其请求命令之后，还要以头信息的形式向Web服务器发送一些别的信息，之后浏览器发送了一空白行来通知服务器，它已经结束了该头信息的发送。）</li><li>Web服务器应答（HTTP/1.1 200 OK   <span style="line-height: 1.45;">应答的第一部分是协议的版本号和应答状态码）</span></li><li><span style="font: normal normal normal 7pt/normal 'Times New Roman';">  </span>Web服务器发送应答头信息</li><li><span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Web服务器向浏览器发送数据</li><li>Web服务器关闭TCP连接</li></ol></div><div><br/></div><div><br/></div><div><br/></div><div><font color="#AD0000" style="font-size: 14pt;"><b>HTTP请求格式</b></font></div><div><span style="text-indent: -84pt;">当浏览器向</span><span style="text-indent: -84pt;">Web服务器发出请求时，它向服务器传递了一个数据块，也就是请求信息，</span><span style="text-indent: -84pt;">HTTP请求信息由3部分组成：</span></div><div><ul><li><span style="line-height: 1.45; text-indent: 51pt;">l</span><span style="text-indent: 51pt; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">   </span><span style="line-height: 1.45; text-indent: 51pt;">请求方法</span><span style="line-height: 1.45; text-indent: 51pt;">URI协议/版本</span><br/></li><li><span style="line-height: 1.45; text-indent: 51pt;">l</span><span style="text-indent: 51pt; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">   </span><span style="line-height: 1.45; text-indent: 51pt;">请求头</span><span style="line-height: 1.45; text-indent: 51pt;">(Request Header)</span><br/></li><li><span style="line-height: 1.45; text-indent: 51pt;">l</span><span style="text-indent: 51pt; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">   </span><span style="line-height: 1.45; text-indent: 51pt;">请求正文</span></li></ul><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">下面是一个HTTP请求的例子：</span></div><div><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"><span>    <span>    <span>    <span>    </span></span></span></span>GET/sample.jspHTTP/1.1</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Accept:image/gif.image/jpeg,*/*</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Accept-Language:zh-cn</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Connection:Keep-Alive</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Host:localhost</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Accept-Encoding:gzip,deflate</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"> </span></div><div><span style="text-indent: 51pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"><span>    <span>    <span>    <span>    </span></span></span></span>username=jinqiao&amp;password=1234</span></div></div></div><div><br/></div><div>（1）<span style="font: normal normal normal 7pt/normal 'Times New Roman';">       </span>请求方法URI协议/版本</div><div><span style="text-indent: 52.5pt;"><span>    <span>    </span></span>请求的第一行是“方法</span><span style="text-indent: 52.5pt;">URL议/版本”：GET/sample.jsp HTTP/1.1</span></div><div>以上代码中“GET”代表请求方法，“/sample.jsp”表示URI，“HTTP/1.1代表协议和协议的版本。</div><div><span style="line-height: 1.45;"><span>    <span>    </span></span>根据HTTP标准，HTTP请求可以使用多种请求方法。例如：HTTP1.1支持7种请求方法：GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中，最常用的方法是GET和POST。</span></div><div><span>    <span>    </span></span>URL完整地指定了要访问的网络资源，通常只要给出相对于服务器的根目录的相对目录即可，因此总是以“/”开头，最后，协议版本声明了通信过程中使用HTTP的版本。</div><div><br/></div><div>（2）　请求头(Request Header)</div><div><span>    <span>    </span></span>请求头包含许多有关的客户端环境和请求正文的有用信息。例如，请求头可以声明浏览器所用的语言，请求正文的长度等。</div><div style="text-indent: 51pt;"><span style="text-indent: 51pt;">Accept:image/gif.image/jpeg.*/*</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt;">Accept-Language:zh-cn</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt;">Connection:Keep-Alive</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt;">Host:localhost</span></div><div style="text-indent: 51pt;"><span style="text-indent: 51pt;">User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)</span></div><div><span style="text-indent: 51pt;"><span>    <span>    <span>    <span>    <span> </span></span></span></span></span>Accept-Encoding:gzip,deflate.</span></div><div><br/></div><div>（3）　请求正文</div><div><span>    <span>    </span></span>请求头和请求正文之间是一个空行，这个行非常重要，它表示请求头已经结束，接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息：</div><div style="text-indent: 51pt;"><span style="text-indent: 51pt;">username=jinqiao&amp;password=1234</span></div><div style="text-indent: 3.15pt;"><span style="text-indent: 3.15pt;">在以上的例子的</span><span style="text-indent: 3.15pt;">HTTP请求中，请求的正文只有一行内容。当然，在实际应用中，HTTP请求正文可以包含更多的内容。</span></div><div>HTTP请求方法我这里只讨论GET方法与POST方法</div><div><br/></div><div><br/></div><div><br/></div><div><font style="font-size: 14pt; color: rgb(173, 0, 0);"><b>相似，HTTP响应也由3个部分构成，分别是：</b></font></div><div><ul><li><span style="text-indent: 15.75pt;">l　协议状态版本代码描述</span></li><li><span style="text-indent: 15.75pt; line-height: 1.45;">l　响应头</span><span style="text-indent: 15.75pt; line-height: 1.45;">(Response Header)</span></li><li><span style="text-indent: 15.75pt;">l　响应正文</span></li></ul></div><div><br/></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">下面是一个</span><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">HTTP响应的例子：</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">HTTP/1.1 200 OK</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Server:Apache Tomcat/5.0.12</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Date:Mon,6Oct2003 13:23:42 GMT</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Content-Length:112</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"> </span></div><div><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;html&gt;</span></div><div><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;head&gt;</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;title&gt;HTTP响应示例&lt;title&gt;</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;/head&gt;</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;body&gt;</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Hello HTTP!</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;/body&gt;</span></div><div style="text-indent: 15.75pt;"><div style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;/html&gt;</span></div><div style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">协议状态代码描述HTTP响应的第一行类似于HTTP请求的第一行，它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求（200表示成功）:</span></div></div><div style="text-indent: 36.75pt;"><div style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">HTTP/1.1 200 OK</span></div><div style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">响应头(Response Header)响应头也和请求头一样包含许多有用的信息，例如服务器类型、日期时间、内容类型和长度等：</span></div></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">　　</span><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"> Server:Apache Tomcat/5.0.12</span></div><div style="text-indent: 42pt;"><span style="text-indent: 42pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Date:Mon,6Oct2003 13:13:33 GMT</span></div><div style="text-indent: 42pt;"><span style="text-indent: 42pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Content-Type:text/html</span></div><div style="text-indent: 42pt;"><span style="text-indent: 42pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Last-Moified:Mon,6 Oct 2003 13:23:42 GMT</span></div><div style="text-indent: 42pt;"><span style="text-indent: 42pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Content-Length:112</span></div><div style="text-indent: 15.75pt;"><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"> 响应正文响应正文就是服务器返回的</span><span style="text-indent: 15.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">HTML页面：</span></div><div style="text-indent: -21pt;"><div style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">　　&lt;html&gt;</span></div><div style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);"><span style="font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;head&gt;</span></div></div><div style="text-indent: 36.75pt;"><span style="text-indent: 36.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;title&gt;HTTP响应示例&lt;title&gt;</span></div><div style="text-indent: 36.75pt;"><span style="text-indent: 36.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;/head&gt;</span></div><div style="text-indent: 36.75pt;"><span style="text-indent: 36.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;body&gt;</span></div><div style="text-indent: 36.75pt;"><span style="text-indent: 36.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">Hello HTTP!</span></div><div style="text-indent: 36.75pt;"><span style="text-indent: 36.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;/body&gt;</span></div><div style="text-indent: 36.75pt;"><span style="text-indent: 36.75pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">&lt;/html&gt;</span></div><div><span style="text-indent: 26.25pt; font-family: Monaco; font-size: 9pt; color: rgb(51, 51, 51);">响应头和正文之间也必须用空行分隔</span><span style="text-indent: 26.25pt; font-size: 12pt; font-family: Monaco; color: rgb(51, 51, 51);">。　　</span></div></div><div><br/></div><div><br/></div><div><br/></div><div><font style="font-size: 14pt; color: rgb(173, 0, 0);"><b><span style="font-style: normal; font-variant: normal; line-height: normal; font-family: 'Times New Roman';">  </span>HTTP应答码</b></font></div><div><br/></div><div><span style="text-indent: -31.5pt;">HTTP应答码也称为状态码，它反映了Web服务器处理HTTP请求状态。HTTP应答码由3位数字构成，其中首位数字定义了应答码的类型：</span></div><div style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 17.95pt;">1XX－信息类(Information),表示收到Web浏览器请求，正在进一步的处理中</div><div style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 17.95pt;">2XX－成功类（Successful）,表示用户请求被正确接收，理解和处理例如：200 OK</div><div style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 17.95pt;">3XX-重定向类(Redirection),表示请求没有成功，客户必须采取进一步的动作。</div><div style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 17.95pt;">4XX-客户端错误(Client Error)，表示客户端提交的请求有错误 例如：404 NOT</div><div style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 17.95pt;">                                    Found，意味着请求中所引用的文档不存在。</div><div style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 17.95pt;">5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理：如 500</div><div><span style="text-indent: -31.5pt;">      对于我们Web开发人员来说掌握HTTP应答码有助于提高Web应用程序调试的效率和准确性。</span></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div></span>
</div></body></html> 